/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package mytime.gui.controller;
import com.jfoenix.controls.JFXCheckBox;
import com.jfoenix.controls.JFXComboBox;
import com.jfoenix.controls.JFXSnackbar;
import com.jfoenix.controls.JFXSpinner;
import java.io.IOException;
import java.net.URL;
import java.sql.SQLException;
import java.util.Locale;
import java.util.ResourceBundle;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.concurrent.Task;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import mytime.be.Location;
import mytime.gui.model.Model;
import mytime.gui.model.VolunteerModel;
import org.controlsfx.validation.ValidationMessage;
import org.controlsfx.validation.decoration.GraphicValidationDecoration;
import org.controlsfx.validation.decoration.ValidationDecoration;
/**
* FXML Controller class
*
* @author Stefan-VpcEB3J1E
*/
public class ChooseLokationController implements Initializable
{
@FXML
private JFXComboBox<Location> comboBoxLocation;
@FXML
private JFXCheckBox checkBoxRemember;
private Model model;
private VolunteerModel volunteerModel;
private Executor exec;
@FXML
private VBox vbox;
private ValidationDecoration iconDecorator;
@FXML
private AnchorPane pane;
private JFXSnackbar snackbar;
/**
* Initializes the controller class.
*/
@Override
public void initialize(URL url, ResourceBundle rb)
{
snackbar = new JFXSnackbar(pane);
iconDecorator = new GraphicValidationDecoration();
model = Model.getInstance();
volunteerModel = VolunteerModel.getInstance();
volunteerModel.setBllManager(model.getBllManager());
// Hente alle locations
setAllLocationsAsItems();
exec = Executors.newCachedThreadPool(runnable
->
{
Thread t = new Thread(runnable);
t.setDaemon(true);
return t;
});
comboBoxLocation.focusedProperty().addListener((o, oldVal, newVal)
->
{
iconDecorator.removeDecorations(comboBoxLocation);
});
}
/**
* Executes the choose location
*
* @param event
*/
@FXML
private void handleChooseLocation(ActionEvent event)
{
if (comboBoxLocation.getSelectionModel().getSelectedItem() == null)
{
iconDecorator.removeDecorations(comboBoxLocation);
iconDecorator.applyValidationDecoration(ValidationMessage.error(comboBoxLocation, ""));
pane.requestLayout();
snackbar.show("Vælg lokation først", 2700);
} else
{
iconDecorator.removeDecorations(comboBoxLocation);
Node button = vbox.getChildren().get(2);
vbox.getChildren().remove(2);
JFXSpinner spinner = new JFXSpinner();
vbox.getChildren().add(spinner);
spinner.requestFocus();
Task<Location> courseTask = new Task<Location>()
{
@Override
public Location call()
{
Location b = null;
try
{
b = model.getSelectedLocation(comboBoxLocation.getSelectionModel().getSelectedItem().getId().get());
} catch (SQLException ex)
{
Alert alert = new Alert(Alert.AlertType.WARNING);
alert.setHeaderText("SQL-Exception");
alert.setContentText(ex.getMessage());
alert.show();
}
return b;
}
};
courseTask.setOnSucceeded(e
->
{
Location course = courseTask.getValue();
if (null != course)
{
volunteerModel.setCurrentLocation(course);
try
{
boolean checkboxBool = checkBoxRemember.selectedProperty().get();
if (checkboxBool == true)
{
Model.getInstance().saveLocationLocally(course.getId().get());
}
Stage mainView = (Stage) comboBoxLocation.getScene().getWindow();
mainView.close();
Locale locale = new Locale("da_DK");
volunteerModel.setCurrentLocale(locale);
ResourceBundle bundle = ResourceBundle.getBundle("mytime.gui.UIResources", locale);
Parent mainViewLoad = FXMLLoader.load(getClass().getResource("/mytime/gui/view/LoginMainView.fxml"), bundle);
Scene scene = new Scene(mainViewLoad);
mainView.setScene(scene);
mainView.setResizable(true);
mainView.show();
} catch (IOException ex)
{
ex.printStackTrace();
}
} else
{
Alert alert = new Alert(Alert.AlertType.ERROR);
alert.setHeaderText("Could not get any locations");
alert.setContentText("The returned locations was null. You fucked up, dickhead");
alert.show();
vbox.getChildren().remove(2);
vbox.getChildren().add(button);
comboBoxLocation.requestFocus();
}
}
);
courseTask.setOnFailed(e
->
{
courseTask.getException().printStackTrace();
}
);
exec.execute(courseTask);
}
}
private void setAllLocationsAsItems()
{
try
{
ObservableList items = FXCollections.observableArrayList();
items.addAll(model.getAllLocations());
comboBoxLocation.setItems(items);
} catch (SQLException ex)
{
Alert alert = new Alert(Alert.AlertType.ERROR);
alert.setTitle("Couldn't get a connection to the database");
alert.setContentText("Check your internet connection, and make you you are connected properly\nErrorcode: " + ex.getMessage());
alert.show();
}
}
}